/*
 * @Descripttion: 
 * @version: 
 * @Author: TT
 * @Date: 2022-12-28 21:32:38
 * @LastEditors: TT
 * @LastEditTime: 2023-03-12 19:19:04
 */

import 'package:hzy_normal_network/hzy_normal_network.dart';
import 'package:hzy_normal_widget/hzy_normal_widget.dart';

import '../components/common_widgets.dart';

HzyNormalClient defaultClient() {
  return Get.find<HzyNormalClient>(tag: HzyNormalClient.defaultClientTag);
}

enum Method {
  get,
  post,
}

/*
 * @description: 通用网络请求器
 * @params {
 *            path: 请求接口地址.
 *                  可以是url + path
 *                  也可以 path.但要设置baseurl.才可以正常使用,否者会404.
 *            data: 请求参数
 *          method: 请求方式.默认get
 *  isglobalparams: 是否需要全局参数.默认是true
 *                  这里我简单说一下,什么时候全局参数.一般我们后台接口,会添加一些通用参数.
 *                  比如客户端类型.(iOS,android,h5)等等.这样话,可能就需要大部分接口都
 *                  需要这样的参数.所以为了满足这个需求,我在封装这个请求器的时候,
 *                  就添加了这个参数.
 *    globalparams: 这个就是你要配置全局参数
 *                  你在请求器的方法里写死也可以.或者某些场景需要修改默认参数.这里也是支持的.
 *        showload: 显示默认加载loading.默认是true
 *         loadmsg: 加载动画提示文字.默认 加载中...
 * }
 * @return {网络数据}
 *  
*/
Future<HzyNormalResponse> request({
  required String path,
  Map<String, dynamic>? data,
  Method method = Method.get,
  bool showload = true,
  bool isneedglobalparams = false,
  Map<String, dynamic>? globalparams,
  String loadmsg = "加载中...",
  HzyNormalTransFormer? httpTransformer,
}) async {
  HzyNormalResponse res;
  if (showload) {
    showLoading(msg: loadmsg);
  }
  Map<String, dynamic> params = {};
  if (isneedglobalparams) {
    params.addAll(globalparams ?? {});
  }
  params.addAll(data ?? {});
  if (method == Method.get) {
    res = await defaultClient().get(
      url: path,
      queryParameters: params,
      httpTransformer: httpTransformer,
    );
  } else {
    res = await defaultClient().post(
      path,
      data: params,
      httpTransformer: httpTransformer,
    );
  }
  if (showload) {
    loadingdismiss();
  }
  return res;
}
